
/**
 * @description 根据数值大小生成颜色，颜色固定，用以区分表格不同系列行
 * @param {Number} number 
 * @returns HEX格式颜色
 */
export function generateHexColor(number) {
  // 确保数字在 0 到 999 之间
  number = number % 1000;

  // 定义红、蓝、绿、黄的色相范围
  const hues = [0, 120, 180, 45]; // 红: 0, 绿: 120, 蓝: 180, 黄: 60
  const hue = hues[number % hues.length]; // 选择主色系

  // 添加微小偏移，使颜色更丰富
  let hueOffset = 0;
  let saturation, lightness;

  if (hue === 180) {
    // 蓝色范围：180-220，覆盖深蓝色和天蓝色
    hueOffset = (number * 20) % 40; // 色相偏移（0-40）
    if (hue + hueOffset < 200) {
      lightness = 66 + (number % 20); // 天蓝色亮度较高（70-90%）
    } else {
      lightness = 50 + (number % 20); // 深蓝色亮度较低（50-70%）
    }
    saturation = 50 + (number % 20); // 蓝色饱和度较高（50-70%）
  } else {
    hueOffset = (number * 15) % 30; // 其他色系色相偏移（0-30）
    saturation = 30 + (number % 20); // 其他色系饱和度较低（30-50%）
    lightness = 75 + (number % 15); // 亮度较高（75-90%），颜色明亮
  }

  const finalHue = (hue + hueOffset) % 360; // 最终色相

  // 将 HSL 转换为 Hex
  const hexColor = hslToHex(finalHue, saturation, lightness);
  return hexColor;
}

// 辅助函数：将 HSL 转换为 Hex
function hslToHex(h, s, l) {
  h /= 360;
  s /= 100;
  l /= 100;

  let c = (1 - Math.abs(2 * l - 1)) * s;
  let x = c * (1 - Math.abs((h * 6) % 2 - 1));
  let m = l - c / 2;
  let r = 0, g = 0, b = 0;

  if (0 <= h && h < 1 / 6) {
    r = c; g = x; b = 0;
  } else if (1 / 6 <= h && h < 2 / 6) {
    r = x; g = c; b = 0;
  } else if (2 / 6 <= h && h < 3 / 6) {
    r = 0; g = c; b = x;
  } else if (3 / 6 <= h && h < 4 / 6) {
    r = 0; g = x; b = c;
  } else if (4 / 6 <= h && h < 5 / 6) {
    r = x; g = 0; b = c;
  } else if (5 / 6 <= h && h <= 1) {
    r = c; g = 0; b = x;
  }

  r = Math.round((r + m) * 255);
  g = Math.round((g + m) * 255);
  b = Math.round((b + m) * 255);

  const toHex = (value) => value.toString(16).padStart(2, '0');
  return `#${toHex(r)}${toHex(g)}${toHex(b)}`;
}
